home *** CD-ROM | disk | FTP | other *** search
/ QRZ! Ham Radio 8 / QRZ Ham Radio Callsign Database - Volume 8.iso / pc / files / dsp / fteyaltr.z / fteyaltr / fftsub86.mac < prev    next >
Text File  |  1991-08-31  |  4KB  |  239 lines

  1. ;*------------------------ fftsub86.mac ------------------------------- */
  2. ;*                                    */
  3. ;* Author:    Eyal Lebedinsky                        */
  4. ;* Date:    May 1990                        */
  5. ;* Version:    9 June 1991                        */
  6. ;*                                    */
  7. ;* used by output of fftg86.c and generates intel 80x86.asm        */
  8. ;* This one is in masm syntax.                        */
  9. ;*                                    */
  10. ;* This program is released into the public domain.            */
  11. ;*                                    */
  12. ;*--------------------------------------------------------------------- */
  13. ;
  14. fft1 MACRO i
  15.  sar _x+i,1
  16. endm
  17. fft2 MACRO i0,i1
  18. ; t1 = x[i0] >> 1;
  19.  mov ax,_x+i0
  20.  sar ax,1
  21. ; x[i0] = t1 + (x[i1] >> 1);
  22.  mov bx,_x+i1
  23.  sar bx,1
  24.  mov cx,ax
  25.  add cx,bx
  26.  mov _x+i0,cx
  27. ; x[i1] = t1 - (x[i1] >> 1);
  28.  sub ax,bx
  29.  mov _x+i1,ax
  30. endm
  31. fft3 MACRO i1,i3,i4
  32. ; fft3 i1,i3,i4
  33. ;    1  2  3
  34. ; x[i4] = ((x[i4] >> 1) - (x[i3] >> 1)) >> 1;
  35.  mov ax,_x+i4
  36.  sar ax,1
  37.  mov bx,_x+i3
  38.  sar bx,1
  39.  mov cx,ax
  40.  sub cx,bx
  41.  sar cx,1
  42.  mov _x+i4,cx
  43. ; t1    = ((x[i4] >> 1) + (x[i3] >> 1)) >> 1;  ax=
  44.  add ax,bx
  45.  sar ax,1
  46. ; x[i3] =  (x[i1] >> 1) - t1;
  47.  mov bx,_x+i1
  48.  sar bx,1
  49.  mov cx,bx
  50.  sub cx,ax
  51.  mov _x+i3,cx
  52. ; x[i1] =  (x[i1] >> 1) + t1;
  53.  add ax,bx
  54.  mov _x+i1,ax
  55. endm
  56. fft4 MACRO i1,i2,i3,i4,cc1
  57. ; fft4 i1,i2,i3,i4,cc1     t1 t2
  58. ;    1  2  3  4   5     di si
  59. ; t3 = mul1 (x[i3], cc1);
  60.  mov ax,_x+i3
  61.  mov cx,cc1
  62.  imul cx
  63.  mov di,dx
  64.  mov si,dx
  65. ; t4 = mul1 (x[i4], cc1);
  66.  mov ax,_x+i4
  67.  imul cx
  68. ; t1 = t3 + t4;
  69.  add di,dx
  70. ; t2 = t3 - t4;
  71.  sub si,dx
  72. ; x[i4] =  (x[i2] >> 1) - t1;
  73.  mov ax,_x+i2
  74.  sar ax,1
  75.  mov bx,ax
  76.  sub bx,di
  77.  mov _x+i4,bx
  78. ; x[i3] = -(x[i2] >> 1) - t1;
  79.  neg ax
  80.  sub ax,di
  81.  mov _x+i3,ax
  82. ; x[i2] =  (x[i1] >> 2) - t2;
  83.  mov ax,_x+i1
  84.  sar ax,1
  85.  sar ax,1
  86.  mov bx,ax
  87.  sub bx,si
  88.  mov _x+i2,bx
  89. ; x[i1] =  (x[i1] >> 2) + t2;
  90.  add ax,si
  91.  mov _x+i1,ax
  92. endm
  93. fft5a MACRO i3,i7,sm1,sp1,cc1,ind
  94. ; fft5a i3,i7,sm1,sp1,cc1,ind    t1 t2 t3 t4
  95. ;     1  2    3   4    5   6    bx cx si di
  96. ;
  97. ; t5 = x[i7];           bp=
  98.  mov bp,_x+i7
  99. ; t1 = mul1 (t5, sm1); bx=
  100.  mov ax,sm1
  101.  imul bp
  102.  mov bx,dx
  103. ;    t6 = x[i3];       ax=
  104.  mov ax,_x+i3
  105. if ind
  106. ;    t6 = x[i3] >> 1;  ax=
  107.  sar ax,1
  108. endif
  109. ; t5 += t6;           bp=
  110.  add bp,ax
  111. ; t2 = mul1 (t6, sp1); cx=
  112.  mov dx,sp1
  113.  imul dx
  114.  mov cx,dx
  115. ; t5 = mul1 (t5, cc1); dx=
  116.  mov ax,cc1
  117.  imul bp
  118. ; t1 += t5;           bx=
  119.  add bx,dx
  120. ; t2 += t5;           cx=
  121.  add cx,dx
  122. endm
  123. fft5b MACRO i4,i8,sm3,sp3,cc3,ind
  124. ; fft5b i4,i8,sm3,sp3,cc3,ind    t1 t2 t3 t4
  125. ;     1  2    3   4    5   6    bx cx si di
  126. ;
  127. ; t5 = x[i8];           bp=
  128.  mov bp,_x+i8
  129. ; t3 = mul1 (t5, sm3); si=
  130.  mov ax,sm3
  131.  imul bp
  132.  mov si,dx
  133. ;    t6 = x[i4];       ax=
  134.  mov ax,_x+i4
  135. if ind
  136. ;    t6 = x[i4] >> 1;  ax=
  137.  sar ax,1
  138. endif
  139. ; t5 += t6;           bp=
  140.  add bp,ax
  141. ; t4 = mul1 (t6, sp3); di=
  142.  mov dx,sp3
  143.  imul dx
  144.  mov di,dx
  145. ; t5 = mul1 (t5, cc3); dx=
  146.  mov ax,cc3
  147.  imul bp
  148. ; t3 += t5;           si=
  149.  add si,dx
  150. ; t4 += t5;           di=
  151.  add di,dx
  152. ;
  153. endm
  154. fft5c MACRO i1,i2,i3,i4,i5,i6,i7,i8
  155. ; fft5c i1,i2,i3,i4,i5,i6,i7,i8   t1 t2 t3 t4
  156. ;     1  2  3  4  5    6  7  8   bx cx si di
  157. ; t5    = t3 - t1;    ax=
  158.  mov ax,si
  159.  sub ax,bx
  160. ; t6    =  x[i2] >> 1;    dx=
  161.  mov dx,_x+i2
  162.  sar dx,1
  163. ; x[i7] = -t6 + t5;
  164.  mov bp,ax
  165.  sub bp,dx
  166.  mov _x+i7,bp
  167. ; x[i4] =  t6 + t5;
  168.  add ax,dx
  169.  mov _x+i4,ax
  170. ;
  171. ; t5    = t2 + t4;     ax=
  172.  mov ax,cx
  173.  add ax,di
  174. ; t6    =  x[i6] >> 1; dx=
  175.  mov dx,_x+i6
  176.  sar dx,1
  177. ; x[i3] = -t6 + t5;
  178.  mov bp,ax
  179.  sub bp,dx
  180.  mov _x+i3,bp
  181. ; x[i8] =  t6 + t5;
  182.  add ax,dx
  183.  mov _x+i8,ax
  184. ;
  185. ; t1 t2 t3 t4
  186. ; bx cx si di
  187. ; t5    = t1 + t3;     bx=
  188.  add bx,si
  189. ; t6    =  x[i1] >> 1; dx=
  190.  mov dx,_x+i1
  191.  sar dx,1
  192. ; x[i6] =  t6 - t5;
  193.  mov bp,dx
  194.  sub bp,bx
  195.  mov _x+i6,bp
  196. ; x[i1] =  t6 + t5;
  197.  add bx,dx
  198.  mov _x+i1,bx
  199. ;
  200. ; t5    = t2 - t4;    cx=
  201.  sub cx,di
  202. ; t6    =  x[i5] >> 1;    dx=
  203.  mov dx,_x+i5
  204.  sar dx,1
  205. ; x[i5] =  t6 - t5;
  206.  mov bp,dx
  207.  sub bp,cx
  208.  mov _x+i5,bp
  209. ; x[i2] =  t6 + t5;
  210.  add cx,dx
  211.  mov _x+i2,cx
  212. endm
  213. fft7 MACRO i1,i2
  214.  mov ax,_x+i2
  215.  imul ax
  216.  mov _qf+i1,dx
  217. endm
  218. fft8 MACRO i1,i2,i3
  219.  mov ax,_x+i2
  220.  imul ax
  221.  mov bx,ax
  222.  mov cx,dx
  223.  mov ax,_x+i3
  224.  imul ax
  225.  add ax,bx
  226.  adc dx,cx
  227.  mov _qf+i1,dx
  228. endm
  229. _TEXT    SEGMENT  WORD PUBLIC 'CODE'
  230. _TEXT    ENDS
  231. _DATA    SEGMENT  WORD PUBLIC 'DATA'
  232. _DATA    ENDS
  233. CONST    SEGMENT  WORD PUBLIC 'CONST'
  234. CONST    ENDS
  235. _BSS    SEGMENT  WORD PUBLIC 'BSS'
  236. _BSS    ENDS
  237. DGROUP    GROUP    CONST, _BSS, _DATA
  238.     ASSUME  CS: _TEXT, DS: DGROUP, SS: DGROUP
  239.